package com.fz.entity;

import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

/**
 * Created by webrx on 2017-09-10.
 */
@Data
//这四个注解都是正确的
//@Component     通用组件     spring框架建议用这个
//@Controller    控制器层     如果使用smvc框架建议用这个
//@Service       业务层
@Repository("bok") @Scope("prototype") //这里的("bok")如果不带的情况下，默认的是("book")  //@Scope("prototype")是多例，@Scope("singleton")是单例,默认是单例模式  @Lazy(true)是懒惰，只有实例化时才执行操作  false是不懒(这个东西只针对单例生效)      //数据库层
public class Book {
    @Value("111")    //可以采用这种方式来赋值
    private int id;
    @Value("张三丰")
    private String name;
    //@Resource(name="teacher")   这个是仅仅可以根据名字,要么找Teacher.java中的teacher，要么是applicationContext.xml中tttt
    //@Autowired    //自动装配 这个可以根据名字也可以根据类型  默认找byName   如果名字找不到，按类型去找byType
    //也可以这个位置不写注解，在applicationContext.xml中http://www.springframework.org/schema/context/spring-context-4.3.xsd"后面
    //加上default-autowire="byName" 效果也是一样的，一样可以把老师类装进去
    public Teacher teacher;

    public Book(){
        System.out.println("无参构造");
    }
    @PreDestroy
    public void closea(){
        System.out.println("closea()");

    }
    @PreDestroy
    public void closeb(){
        System.out.println("closeb()");
    }
    @PostConstruct
    public void inita(){
        System.out.println("inita()");
    }
    @PostConstruct
    public void initb(){
        System.out.println("initb()");
    }
    @PostConstruct
    public void initc(){
        System.out.println("initc()");
    }
}
